public protocol BaseValue{
    var baseValue:Any{get}
}
extension String:BaseValue{public var baseValue: Any{return self}}
extension Int:BaseValue{public var baseValue: Any{return self}}
extension Float:BaseValue{public var baseValue: Any{return self}}
extension Double:BaseValue{public var baseValue: Any{return self}}
extension CGFloat:BaseValue{public var baseValue: Any{return self}}
extension Bool:BaseValue{public var baseValue: Any{return self}}
extension Dictionary:BaseValue{public var baseValue: Any{return self}}
extension NSDictionary:BaseValue{public var baseValue: Any{return self}}
extension NSString:BaseValue{public var baseValue: Any{return self}}


extension NSNumber:BaseValue{
    public var baseValue: Any {
        let typeString = String(cString: objCType)
        switch typeString {
        case "c": // 'c' 通常表示一个 char 类型，在这里它表示一个 Bool 值
            return boolValue
        case "i": // 'i' 表示一个 int 类型
            return intValue
        case "s": // 's' 表示一个 short 类型
            return int16Value
        case "l": // 'l' 表示一个 long 类型，在32位系统上是32位，在64位系统上是64位
            return int32Value
        case "q": // 'q' 表示一个 long long 类型，无论在什么系统上都是64位
            return int64Value
        case "f": // 'f' 表示一个 float 类型
            return floatValue
        case "d": // 'd' 表示一个 double 类型
            return doubleValue
        default:
            return self
        }
    }
}
